package com.itlong.cloud.app.service;

import com.itlong.cloud.POJO.DTO.app.AppGetVisitPassWordDTO;
import com.itlong.cloud.POJO.DTO.app.AppGetVisitorRecordPageDTO;
import com.itlong.cloud.POJO.DTO.app.MiniGetReservationProofPageDTO;
import com.itlong.cloud.POJO.PO.AppVisitorPassCodeRecordPO;
import com.itlong.cloud.POJO.VO.app.AppGetVisitorRecordPageVO;
import com.itlong.cloud.POJO.VO.app.MiniGetReservationProofPageVO;
import com.itlong.cloud.POJO.VO.app.MiniGetVisitorPassRecordPageVO;
import com.itlong.cloud.utils.page.Page;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      APP密码通行记录业务处理接口
 * </desc>
 *
 * @createDate 2017/10/30
 */
public interface IAppVisitorPassCodeRecordService {
    /**
     * <desc>
     *      保存通行密码记录
     * </desc>
     *
     * @param appGetVisitPassWordDTO 访客密码通行记录实体类
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/30
     */
    AppVisitorPassCodeRecordPO save(AppGetVisitPassWordDTO appGetVisitPassWordDTO) throws Exception;

    /**
     * <desc>
     *      保存访客人脸信息
     * </desc>
     *
     * @param passId 访客信息编号
     * @param uploadFilePath 图片地址
     * @param vFaceId 百度中的人脸编号
     * @param projectId 项目编号
     * @param idcardKey 身份证序号
     * @param idcardKey 访客预约标识
     * @return sql执行行数
     * @author Qiang.S
     * @createDate 2019/02/27
     */
    Integer setVisitPassFace(String passId, String uploadFilePath, String vFaceId, String projectId, String idcardKey, Integer visitorReservationMark) throws Exception;


    /**
     * <desc>
     *      获取分页数据
     * </desc>
     *
     * @param pageDTO   参数DTO
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/31
     */
    Page<AppGetVisitorRecordPageVO> getPage(AppGetVisitorRecordPageDTO pageDTO) throws Exception;

    /**
     * <desc>
     *      设置已分享
     * </desc>
     *
     * @param passId   访客唯一编号
     * @return
     * @author Qiang.S
     * @createDate 2019/04/16
     */
    void setShare(String passId) throws Exception;

    /**
     * <desc>
     *      根据楼栋,单元,房间查询地址
     * </desc>
     *
     * @param buildId   楼栋编号
     * @param unitId   单元编号
     * @param roomId   房间编号
     * @return
     * @author Qiang.S
     * @createDate 2019/04/16
     */
    String getAddress(String buildId, String unitId, String roomId) throws Exception;

    /**
     * <desc>
     *      根据访客编号获取信息
     * </desc>
     *
     * @param passId 访客编号
     * @return 格式化响应结果
     * @author Qiang.S
     * @createDate 2019/04/24
     */
    AppGetVisitorRecordPageVO getVisitorPassByPassId(String passId) throws Exception;

    /**
     * <desc>
     *      删除访客信息
     * </desc>
     *
     * @param passId 访客编号
     * @return 格式化响应结果
     * @author Qiang.S
     * @createDate 2019/04/28
     */
    Integer deleteVisitorInfo(String passId) throws Exception;

    /**
     * <desc>
     *      获取访客预约凭证分页数据
     * </desc>
     *
     * @param pageDTO   参数DTO
     * @return
     * @author Juguang.S
     * @createDate 2019/04/29
     */
    Page<MiniGetReservationProofPageVO> getReservationProofPage(MiniGetReservationProofPageDTO pageDTO) throws Exception;

    /**
     * <desc>
     *      获取访客身份通行记录
     * </desc>
     *
     * @param pageDTO   参数DTO
     * @return
     * @author Juguang.S
     * @createDate 2019/04/30
     */
    Page<MiniGetVisitorPassRecordPageVO> getVisitorPassRecordPage(MiniGetReservationProofPageDTO pageDTO) throws Exception;

    /**
     * <desc>
     *      获取访客单信息
     * </desc>
     *
     * @param userId   用户编号
     * @param projectId   项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/05/05
     */
    List<MiniGetReservationProofPageVO> getReservationVisitorInfo(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      获取当前用户注册人脸信息
     * </desc>
     *
     * @param userId   用户编号
     * @param projectId   项目编号
     * @param type   当前用户身份类型 1代表业主 2代表访客
     * @return 人脸url
     * @author Juguang.S
     * @createDate 2019/05/06
     */
    Map<String,String> getUserFaceUrlInfo(String userId, String projectId, String type);

    /**
     * <desc>
     *      校验该访客记录是否已被物业审批并且已认证过
     * </desc>
     *
     * @param passId  访客单号
     * @return
     * @author Juguang.S
     * @createDate 2019/05/27
     */
    Integer isAllowedAuthenticate(String passId);

    /**
     * <desc>
     *      获取有效的访客通行密码记录
     * </desc>
     *
     * @param projectId 项目编号
     * @param pageNo 页数
     * @param pageSize 每页数
     * @param userId 用户id
     * @return 有效的访客通行密码记录
     * @author wangzhi
     * @createDate 2019/07/11
     */
    Map<String,Object> getAvailableVisitorPwd(String projectId, String pageNo, String pageSize, String userId) throws Exception;

    /**
     * <desc>
     *      物业业主审核通过有效时间变更后重新处理生成二维码相关逻辑
     * </desc>
     *
     * @param appGetVisitPassWordDTO 访客密码通行记录实体类
     * @return
     * @author Juguang.S
     * @createDate 2020/09/16
     */
    AppVisitorPassCodeRecordPO updateQrcodeByTimeModify(AppGetVisitPassWordDTO appGetVisitPassWordDTO) throws Exception;
}
